﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace iNet.Media
{
	/// <summary>
	/// 可播放的媒體介面。
	/// </summary>
	public interface IPlayableMedia : IMedia
	{
		/// <summary>
		/// 取得媒體是否支援暫停。
		/// </summary>
		bool CanPause { get; }
		/// <summary>
		/// 取得媒體是否支援搜尋。
		/// </summary>
		bool CanSeek { get; }
		/// <summary>
		/// 取得媒體的時間長度，單位為毫秒。Null (Visual Basic 為 Nothing) 表示媒體沒有固定的時間長度。
		/// </summary>
		long? Duration { get; }
		/// <summary>
		/// 發生在 Duration 屬性值改變後。
		/// </summary>
		event EventHandler<DataEventArgs<long?>> DurationChanged;
		/// <summary>
		/// 取得媒體播放時是否發生錯誤。
		/// </summary>
		bool HasError { get; }
		/// <summary>
		/// 取得媒體的播放狀態。
		/// </summary>
		PlayableMediaState MediaState { get; }
		/// <summary>
		/// 發生在 MediaState 屬性值改變後。
		/// </summary>
		event EventHandler<ValueChangedEventArgs<PlayableMediaState>> MediaStateChanged;
		/// <summary>
		/// 暫停媒體播放。
		/// </summary>
		void Pause();
		/// <summary>
		/// 開始播放媒體。
		/// </summary>
		void Play();
		/// <summary>
		/// 發生在 PlayablePositionStart 或 PlayablePositionEnd 屬性值改變後。
		/// </summary>
		event EventHandler PlayablePositionChanged;
		/// <summary>
		/// 取得可播放的結束位置，單位為毫秒。Null (Visual Basic 為 Nothing) 表示媒體沒有明確的可播放位置。
		/// </summary>
		long? PlayablePositionEnd { get; }
		/// <summary>
		/// 取得可播放的起始位置，單位為毫秒。Null (Visual Basic 為 Nothing) 表示媒體沒有明確的可播放位置。
		/// </summary>
		long? PlayablePositionStart { get; }
		/// <summary>
		/// 取得或設定媒體目前的播放位置，單位為毫秒。Null (Visual Basic 為 Nothing) 表示媒體沒有明確的播放位置。
		/// </summary>
		long? Position { get; set; }
		/// <summary>
		/// 發生在 Position 屬性值改變後。
		/// </summary>
		event EventHandler<DataEventArgs<long?>> PositionChanged;
		/// <summary>
		/// 停止媒體播放。
		/// </summary>
		void Stop();
	}
	#region PlayableMediaState
	/// <summary>
	/// 表示可播放媒體目前的狀態。
	/// </summary>
	public enum PlayableMediaState
	{
		/// <summary>
		/// 媒體發生錯誤。
		/// </summary>
		Error,
		/// <summary>
		/// 已經停止播放。
		/// </summary>
		Stopped,
		/// <summary>
		/// 正在播放。
		/// </summary>
		Playing,
		/// <summary>
		/// 已經暫停播放。
		/// </summary>
		Paused,
	}
	#endregion
}
